require(["config"],function(){
    require(["jquery", "template", "header", "cookie"], function($, template) {
            function Cart(){
                this.products = null; // 保存购物车的商品数组结构
                this.load();
                 this.addListener();
                  this.calcTotal();
                  this.search();
            }
        Cart.prototype={
             search:function(){
             $(window).scroll(function() {
                var _top = document.documentElement.scrollTop || document.body.scrollTop;
                // 判断是否到达 1000 px位置
                if(_top >=65){
               $(".search").css('display','block');
               $(".top").css('display','block');
            } else {
                $(".search").css('display','none');
                $(".top").css('display','none');
            }
              });
           
            },
            constructor:Cart,
            //加载。渲染页面，没有者显示空页面
            load:function(){
                $.cookie.json = true;
             var products = this.products = $.cookie("cart") || [];
             // 判断是否有购物车商品
                if (products.length === 0) { // 购物车为空
                    $(".empty").show().siblings(".not-empty").hide();
                    return;
                }
                // 购物车非空
                $(".empty").hide().siblings(".not-empty").removeClass("hidden");
                // 渲染模板
                var data = {products: products}
                var html = template("cart-body-template", data);
                $(".cart-table tbody").html(html);
                // console.log("asdased");
            },
            addListener:function(){
                //删除
                $(".cart-table tbody").on("click", ".del", $.proxy(this.delHandler, this))
                // +/-数量
               $(".cart-table tbody").on("click", ".cut,.add", $.proxy(this.decIncHandler, this))
               // 输入修改数量
                $(".cart-table tbody").on("blur", ".amount", $.proxy(this.inputHandler, this));
             },
            //删除单行
            delHandler:function(event){
               // 获取事件源元素(DOM元素)
                var src=event.target;
                // console.log(src);
                //获取事件源元素所在行，jquery
                var tr=$(src).parents("tr");
                var id = tr.find(".id").text();
                // console.log(this.products);
                // 从数组中删除该 id 对应的商品对象
                this.products = this.products.filter(function(prod) {
                    // return !(prod.id == id);
                    if (prod.id ===id)
                        return false;
                    return true;
                });
                // console.log(this.products);
                // 从 cookie 中保存的购物车结构中删除商品数据
                $.cookie("cart", this.products, {expires: 10, path: "/"});
                // 从 DOM 树中删除 DOM 行结构
                tr.remove();
                 if (this.products.length === 0) { // 购物车为空
                    $(".empty").show().siblings(".not-empty").hide();
                    return;
                }
                 this.calcTotal();
            },
            //+/-数量处理
          decIncHandler:function(event) {
               var src = event.target;
               var tr = $(src).parents("tr");
                var id = tr.find(".id").text();
                var product = this.products.filter(function(prod) {
                    return prod.id == id;
                    /*if (prod.id == id)
                        return true;
                    return false;*/
                })[0];
                if ($(src).is(".cut")) { // -
                    if (product.amount <= 1)
                        return;
                    product.amount--;
                } else { // +
                    product.amount++;
                }
                $.cookie("cart", this.products, {expires:10, path:"/"});
                    // 页面渲染
                tr.find(".amount").val(product.amount);
                tr.find(".sub").text(product.amount*product.price);

                 this.calcTotal();
            },

            // 输入数量处理
            inputHandler:function(event){
                //获取触犯对象的源元素
                var src=event.target;
                //获取tr
                var tr=$(src).parents("tr");
                //获取商品id
                var id=tr.find(".id").text();
                //商品对象
                var product = this.products.filter(prod=>prod.id == id)[0];
                //修改数量
                var _amount=$(src).val();
               var reg = /^[1-9]\d*$/;
                if (!reg.test(_amount)) { // 格式有误，则还原为原有数量值
                    $(src).val(product.amount);
                    return;
                }
                product.amount=_amount;
                //渲染
                $.cookie("cart", this.products, {expires:10, path:"/"});
                tr.find(".sub").text(product.amount*product.price);

                this.calcTotal();
            },
            //计算合计
            calcTotal:function(){
                    var sum=0;
                $(".sub").each(function(){
                    sum+= Number($(this).parents("tr").find(".sub").text());
                 });
                 // console.log(sum);
                 $(".total").html(sum);
             }

        },



        new Cart();
    });
});

 
